package com.directorio.controller.servlets;

import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.directorio.modelo.bean.Departamento;
import com.directorio.modelo.bean.Distrito;
import com.directorio.modelo.bean.Provincia;
import com.directorio.modelo.service.LocalidadesService;
import com.directorio.controller.FrontEnd;
import com.google.gson.Gson;

public class LocalidadesController extends HttpServlet {
 
    private static final long serialVersionUID = 1L;
    private LocalidadesService localidades = null;
    private HttpServletRequest request;
    private Gson json = null;
    private ServletConfig conf;
    public LocalidadesController() {
        super();
        requestContext();
    }
    public void init(ServletConfig config) throws ServletException {
    	this.conf = config;
		super.init(config);
		requestContext();
	}
    private void requestContext() {
        System.out.println("Cargando Logica Localidades...!");
        System.out.println("Context Nullo: " + (FrontEnd.CONTEXT == null ? "Si" : "No"));
        localidades = (LocalidadesService) FrontEnd.CONTEXT.getBean("localidadesService");
        json = new Gson();
        System.out.println("Logica Localidades Cargado Correctamente...!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        procestServlet(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        procestServlet(request, response);
    }

    private void procestServlet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setCharacterEncoding("UTF-8");
        this.request = request;
        String ret = "";
        try {
            int op = Integer.parseInt(request.getParameter("opt"));
            switch (op) {
                case 1:ret = this.getDepartamentoAll();break;
                case 2:ret = this.getDepartamento();break;
                case 3:ret = this.getProvinciaAll();break;
                case 4:ret = this.getProvinciaFromDepart();break;
                case 5:ret = this.getProvincia();break;
                case 6:ret = this.getDistritoAll();break;
                case 7:ret = this.getDistritoFromProv();break;
                case 8:ret = this.getDistrito();break;
                case 9:ret = this.getSector();break;
                case 10:ret = this.getSectorDet();break;
                case 11:ret = this.getSectorDetItm();break;
                case 12:ret = this.getDataTip();break;
                case 13:ret = this.getTipoCapac();break;
                case 14:ret = this.getTipoFormBasic();break;
                case 15:ret = this.getTipoFormSuper();break;
                case 16:ret = this.getTipoFormPostGrad();break;
            }
        } catch (NumberFormatException ex) {
            ex.printStackTrace();
        }
        response.getWriter().print(ret);
    }

    private String getTipoFormPostGrad() {
    	String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerTipoPostGrados());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
	}

	private String getTipoFormSuper() {
		String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerTipoFormacionSuperior());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
	}

	private String getTipoFormBasic() {
		String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerTipoFormacionBasica());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
	}

	private String getTipoCapac() {
    	String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerTipoCapacitac());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
	}

	private String getDataTip() {
        String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerPersonalRequerimiento());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
    }

    private String getSectorDetItm() {
        String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerSectorHabilItm(this.request.getParameter("cod")));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
    }

    private String getSectorDet() {
        String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerSectorHabil(this.request.getParameter("cod")));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
    }

    private String getSector() {
        String ret = "";
        try {
            ret = json.toJson(this.localidades.obtenerAllSector());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return ret;
    }

    private String getDepartamentoAll() {
        String ret = "";
        try {
            List<Departamento> list = this.localidades.ObtenerAllDepartamento();
            ret = json.toJson(list);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getDepartamento() {
        String codigo = this.request.getParameter("codigo");
        String ret = "";
        try {
            Departamento dep = this.localidades.obtenerDepartamento(codigo);
            ret = json.toJson(dep);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getProvinciaAll() {
        String ret = "";
        try {
            List<Provincia> list = this.localidades.obtenerAllProvincia();
            ret = json.toJson(list);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getProvinciaFromDepart() {
        String codigo = this.request.getParameter("codigo");
        String ret = "";
        try {
            List<Provincia> list = this.localidades.obtenerProvinciaFromDepartamento(codigo);
            ret = json.toJson(list);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getProvincia() {
        String codigo = this.request.getParameter("codigo");
        String ret = "";
        try {
            Provincia prov = this.localidades.obtenerProvincia(codigo);
            ret = json.toJson(prov);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getDistritoAll() {
        String ret = "";
        try {
            List<Distrito> list = this.localidades.obtenerAllDistrito();
            ret = json.toJson(list);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getDistritoFromProv() {
        String codigo = this.request.getParameter("codigo");
        String ret = "";
        try {
            List<Distrito> list = this.localidades.obtenerDistritoFromProvincia(codigo);
            ret = json.toJson(list);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }

    private String getDistrito() {
        String codigo = this.request.getParameter("codigo");
        String ret = "";
        try {
            Distrito dist = this.localidades.obtenerDistrito(codigo);
            ret = json.toJson(dist);
        } catch (Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }
}
